﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using SIBI.Models;
using PagedList;

namespace SIBI.Controllers
{
    [Authorize]
    public class LocalidadController : Controller
    {
        private TEJECUTIVOContext db = new TEJECUTIVOContext();

        //***********************************************************************************//
        // Autor:  								                		     				*//
		//***********************************************************************************//
		// Index()													 						*//
		// Función que devuelve la vista de todos los ítems de Localidad listados en la 	*//
		// pantalla.																		*//
		// _________________________________________________________________________________*//
		// Entrada: None                                        							*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos los Ceco listados.			 					*//
		// _________________________________________________________________________________*//
        public ViewResult Index()
        {
            return View(db.LOCALIDAD.ToList());
        }
		
        //***********************************************************************************//
        // Autor:  							                			     				*//
		//***********************************************************************************//
		// GetLocalidades()																	*//
		// Función que devuelve la vista de todos las Localidades del sitema	para asi	*// 
		//  listarlos en las funciones de autocompletado del sistema. 						*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	query: String llenado en el autocompletado, utilizado para buscar			*//
		// 		las Localidades que coincidan en BD.	 									*//
		// _________________________________________________________________________________*//
		// Salida:  Arreglo que posee todos las Localidades que conciden con el String de 	*//
		// busqueda.																		*//
		// _________________________________________________________________________________*//
        [HttpPost]
        public ActionResult GetLocalidades(string query)
        {
			//Filtrado de la Localidad por los paremetros de entrada
            var localidades = (from m in db.LOCALIDAD
                         where (
                            m.localidad_id.Contains(query) ||
                            m.localidad_nombre.Contains(query)
                         )
                         select new
                         {
                             Nombre = m.localidad_nombre,
                             LocalidadId = m.localidad_id
                         }).Take(15).ToArray();
            return Json(localidades);
        }

		//***********************************************************************************//
        // Autor:  						                				     				*//
		//***********************************************************************************//
		// SearchIndex()	Acceso INVITADO	y ADMINISTRADOR									*//
		// Acción que devuelve la vista de todos los ítems de Localidad listados, paginados *//
		// y con opción de búsqueda.		 												*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	Page: entero que denota el numero de pagina que se tiene en la lista de 	*//
		// 		búsqueda, por defecto es 1.													*//
		// •	Parámetros con prefijo search: caracteres por los cuales se va a filtrar la *//
		// 		búsqueda. 																	*//
		// •	Parámetros con prefijo current: caracteres que guardan la ultima búsqueda de*// 
		// 		filtrado para mantenerla durante los cambios de página. 					*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos las Localidades listados deseados.				*//
		// _________________________________________________________________________________*//
        public ActionResult SearchIndex(string currentNPer, string searchNPer, string currentEmp, string searchEmp, int? page = 1)
        {
            var car = from m in db.LOCALIDAD
                      select m;

			//Metodo GET Inicializar las variables con los valores de busqueda introducidos
            if (Request.HttpMethod == "GET")
            {
                searchNPer = currentNPer;
                searchEmp = currentEmp;
            }
            else
            {
                page = 1;
            }
			
			//Metodo POST Inicializar las variables con los valores de busqueda introducidos
            ViewBag.CurrentNPer = searchNPer;
            ViewBag.CurrentEmp = searchEmp;

            int pageSize = 10;
            int pageIndex = (page ?? 1) - 1;

			//Filtrado por los parametros en entreda capturado en al interfaz
            if (!String.IsNullOrEmpty(searchNPer))
            {
                car = car.Where(s => s.localidad_id.Contains(searchNPer));
            }

            if (!String.IsNullOrEmpty(searchEmp))
            {
                car = car.Where(s => s.localidad_nombre.Contains(searchEmp));
            }

			//Ordenar los BI del return
            car = car.OrderBy(x => x.localidad_id);

            return View(car.ToPagedList(pageIndex, pageSize));
        }

		//***********************************************************************************//
        // Autor:  							                			     				*//
		//***********************************************************************************//
		// Details()	Acceso INVITADO	y ADMINISTRADOR										*//
		// Función que devuelve la vista de los detalles de una Localidad especificada.	 	*//
		// _________________________________________________________________________________*//
		// Entrada: 																		*//
		// •	id: identificador de la Localidad que se desea ver los detalles. 			*//
		// _________________________________________________________________________________*//
		// Salida:  Vista que posee todos los datos de la Localidad desado.					*//
		// _________________________________________________________________________________*//
        public ViewResult Details(string id)
        {
            LOCALIDAD localidad = db.LOCALIDAD.Find(id);
            return View(localidad);
        }

        protected override void Dispose(bool disposing)
        {
            db.Dispose();
            base.Dispose(disposing);
        }
    }
}